"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 12、面向对象编程.py
"""

"""
什么是面向对象         ->      创建对象，使用对象，操作对象

    1、语言层面 ： 封装代码和数据
    2、规格层面 : 对象是一系列可被使用的公共接口
    3、从概念层面 ： 对象是某种拥有责任的抽象

类、方法、类变量的定义：
      类   ： 抽象的概念，一类事物
    类变量  ： 类变量在整个实例化的对象中是共用的
    类方法
    实例变量  __init__   以 self.变量名 方式定义的变量，供实例方法调用
    实例方法  ： 类中定义的函数，对外提供的服务
    
实例引用，实例变量使用
    实例引用 -> 实例化一个对象

"""


# 定义一个类，封装属性和方法

class Person:

    # 类变量
    m = '好好学习：深度和广度'

    # 构造函数，在类实例化的时候被调用
    def __init__(self,name,age):
        # 实例变量 ： self.变量名的方式，访问到的变量叫做实例变量
        self.name = name
        self.age = age

    # 带有self的均是实例方法，供实例调用
    def study(self):
        print(f'{self.name}在good study')
    def play(self):
        print(f'{self.name}在 play')
    def jump(self):
        print(f'{self.name}在跳')

# 类的实例化
a = Person('Tom',18)
a.jump()

b = Person('MackJia',28)
b.study()
print(f'实例变量为:{b.name}')             # 实例变量为:MackJia
print(f'类变量为：{Person.m}')         # 类变量为：好好学习：深度和广度

# 类方法不能直接访问实例方法，如果要访问，需添要加装饰器@classmethod -> cls
try:
    # 缺少指向它本身的self参数：missing 1 required positional argument: 'self'
    print(Person.play())
except Exception as e:
    print(f'抛出异常:{e}')







